<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分布式系统服务发现架构指南</title>
    <link href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        .hero-gradient {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        
        .card-hover {
            transition: all 0.3s ease;
            border: 1px solid rgba(255, 255, 255, 0.1);
            backdrop-filter: blur(10px);
            background: rgba(255, 255, 255, 0.95);
        }
        
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
            border-color: rgba(102, 126, 234, 0.3);
        }
        
        .section-title {
            position: relative;
            padding-left: 20px;
        }
        
        .section-title::before {
            content: '';
            position: absolute;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
            width: 4px;
            height: 30px;
            background: linear-gradient(180deg, #667eea 0%, #764ba2 100%);
            border-radius: 2px;
        }
        
        .feature-icon {
            width: 60px;
            height: 60px;
            display: flex;
            align-items: center;
            justify-content: center;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border-radius: 15px;
            color: white;
            font-size: 24px;
            margin-bottom: 20px;
            transition: all 0.3s ease;
        }
        
        .feature-icon:hover {
            transform: rotate(10deg) scale(1.1);
        }
        
        .mermaid {
            background: white;
            padding: 30px;
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
        }
        
        .content-card {
            background: white;
            border-radius: 20px;
            padding: 40px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
            margin-bottom: 30px;
        }
        
        .highlight-text {
            background: linear-gradient(120deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            font-weight: 600;
        }
        
        .list-item {
            position: relative;
            padding-left: 30px;
            margin-bottom: 15px;
        }
        
        .list-item::before {
            content: '▸';
            position: absolute;
            left: 0;
            color: #667eea;
            font-weight: bold;
            font-size: 20px;
        }
        
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(30px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        .animate-fadeInUp {
            animation: fadeInUp 0.8s ease-out;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <div class="hero-gradient text-white py-20 px-6">
        <div class="max-w-6xl mx-auto text-center animate-fadeInUp">
            <h1 class="text-5xl md:text-6xl font-bold mb-6">
                分布式系统服务发现架构
            </h1>
            <p class="text-xl md:text-2xl opacity-90 max-w-3xl mx-auto leading-relaxed">
                构建高效、可靠、可扩展的微服务通信基础设施
            </p>
            <div class="mt-10 flex justify-center space-x-8">
                <div class="text-center">
                    <i class="fas fa-network-wired text-4xl mb-2"></i>
                    <p class="text-sm opacity-80">智能路由</p>
                </div>
                <div class="text-center">
                    <i class="fas fa-shield-alt text-4xl mb-2"></i>
                    <p class="text-sm opacity-80">安全可靠</p>
                </div>
                <div class="text-center">
                    <i class="fas fa-expand-arrows-alt text-4xl mb-2"></i>
                    <p class="text-sm opacity-80">弹性扩展</p>
                </div>
            </div>
        </div>
    </div>

    <!-- Main Content -->
    <div class="max-w-7xl mx-auto px-6 py-12">
        
        <!-- Introduction -->
        <div class="content-card animate-fadeInUp mb-12">
            <p class="text-lg leading-relaxed text-gray-700 indent-8">
                在分布式系统中，高效的服务发现是确保系统各组件能够相互定位和通信的关键。服务发现涉及到服务注册、服务查询、负载均衡以及故障处理等多个方面。
            </p>
        </div>

        <!-- Architecture Diagram -->
        <div class="content-card animate-fadeInUp mb-12">
            <h2 class="text-3xl font-bold mb-6 text-center highlight-text">服务发现架构全景图</h2>
            <div class="mermaid">
                graph TB
                    subgraph "服务提供者"
                        S1[服务实例1]
                        S2[服务实例2]
                        S3[服务实例3]
                    end
                    
                    subgraph "服务注册中心"
                        RC[注册中心<br/>Consul/Zookeeper/Eureka]
                        HM[健康监测]
                        SM[服务元数据]
                    end
                    
                    subgraph "服务消费者"
                        C1[客户端1]
                        C2[客户端2]
                        LB[负载均衡器]
                    end
                    
                    S1 -->|注册/心跳| RC
                    S2 -->|注册/心跳| RC
                    S3 -->|注册/心跳| RC
                    
                    RC --> HM
                    RC --> SM
                    
                    C1 -->|查询| RC
                    C2 -->|查询| RC
                    LB -->|获取服务列表| RC
                    
                    LB -->|请求分发| S1
                    LB -->|请求分发| S2
                    LB -->|请求分发| S3
            </div>
        </div>

        <!-- Service Registration -->
        <div class="content-card animate-fadeInUp">
            <h2 class="text-3xl font-bold mb-8 section-title">1. 服务注册与注销</h2>
            
            <div class="grid md:grid-cols-2 gap-8">
                <div class="card-hover p-6 rounded-xl">
                    <div class="feature-icon">
                        <i class="fas fa-plus-circle"></i>
                    </div>
                    <h3 class="text-xl font-bold mb-4 highlight-text">注册机制</h3>
                    <div class="space-y-4">
                        <div class="list-item">
                            <strong>服务注册中心</strong>：使用服务注册中心（如 Consul、Zookeeper、Eureka）来维护服务的注册信息。服务在启动时向注册中心注册自身的元数据（如服务名、地址、端口、健康状态等）。注册中心能够提供服务列表和查询功能。
                        </div>
                        <div class="list-item">
                            <strong>自注册与自动注册</strong>：支持服务自注册和自动注册机制。服务启动时自动注册到注册中心，并在停止时自动注销。这种机制简化了服务的管理和运维。
                        </div>
                    </div>
                </div>
                
                <div class="card-hover p-6 rounded-xl">
                    <div class="feature-icon">
                        <i class="fas fa-minus-circle"></i>
                    </div>
                    <h3 class="text-xl font-bold mb-4 highlight-text">注销机制</h3>
                    <div class="space-y-4">
                        <div class="list-item">
                            <strong>心跳检测</strong>：服务注册中心通常使用心跳机制来检测服务的健康状态。如果服务没有按期发送心跳，注册中心将自动将其标记为不可用并进行注销。这有助于处理服务崩溃或网络分区带来的问题。
                        </div>
                        <div class="list-item">
                            <strong>优雅停机</strong>：服务在关闭时，优雅地从注册中心注销，以确保新请求不会发送到正在关闭的服务实例，从而避免服务中断。
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Service Query -->
        <div class="content-card animate-fadeInUp">
            <h2 class="text-3xl font-bold mb-8 section-title">2. 服务查询</h2>
            
            <div class="grid md:grid-cols-2 gap-8">
                <div class="card-hover p-6 rounded-xl">
                    <div class="feature-icon">
                        <i class="fas fa-search"></i>
                    </div>
                    <h3 class="text-xl font-bold mb-4 highlight-text">查询机制</h3>
                    <div class="space-y-4">
                        <div class="list-item">
                            <strong>基于 DNS 的服务发现</strong>：使用 DNS（如 CoreDNS、Bind）来实现服务的发现。服务注册中心将服务信息发布到 DNS 中，客户端通过查询 DNS 获取服务实例的 IP 地址和端口。
                        </div>
                        <div class="list-item">
                            <strong>直接查询注册中心</strong>：客户端直接查询服务注册中心以获取服务实例的信息。这种方式提供了更细粒度的服务管理和查询功能。
                        </div>
                    </div>
                </div>
                
                <div class="card-hover p-6 rounded-xl">
                    <div class="feature-icon">
                        <i class="fas fa-tachometer-alt"></i>
                    </div>
                    <h3 class="text-xl font-bold mb-4 highlight-text">查询优化</h3>
                    <div class="space-y-4">
                        <div class="list-item">
                            <strong>缓存机制</strong>：客户端可以缓存服务实例的信息以减少对注册中心的查询频率，降低查询延迟和注册中心的负载。缓存失效机制和更新策略确保缓存数据的准确性。
                        </div>
                        <div class="list-item">
                            <strong>分布式查询</strong>：在大型分布式系统中，服务注册中心通常需要支持分布式查询，以提高查询性能和容错能力。多副本和分片机制可以分散查询负载和提高响应速度。
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Load Balancing -->
        <div class="content-card animate-fadeInUp">
            <h2 class="text-3xl font-bold mb-8 section-title">3. 负载均衡</h2>
            
            <div class="mb-8">
                <div class="mermaid">
                    graph LR
                        Client[客户端请求]
                        LB{负载均衡器}
                        S1[服务实例1<br/>权重: 3]
                        S2[服务实例2<br/>权重: 2]
                        S3[服务实例3<br/>权重: 1]
                        
                        Client --> LB
                        LB -->|30%| S1
                        LB -->|50%| S2
                        LB -->|20%| S3
                        
                        style LB fill:#667eea,stroke:#fff,stroke-width:2px,color:#fff
                </div>
            </div>
            
            <div class="grid md:grid-cols-2 gap-8">
                <div class="card-hover p-6 rounded-xl">
                    <div class="feature-icon">
                        <i class="fas fa-balance-scale"></i>
                    </div>
                    <h3 class="text-xl font-bold mb-4 highlight-text">负载均衡策略</h3>
                    <div class="space-y-4">
                        <div class="list-item">
                            <strong>轮询</strong>：轮询是一种简单的负载均衡策略，通过轮流将请求分发到所有可用的服务实例。这种方法适用于负载相对均匀的场景。
                        </div>
                        <div class="list-item">
                            <strong>加权轮询